//
//  HomeTableViewController.swift
//  Weobo
//
//  Created by 史亚洲 on 16/1/11.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD


private let HomeCellId = "HomeCellId"
class HomeTableViewController: BaseViewController {
    
    //模型数据
    //1.定义属性,记录数组中上一次的数量
    private var dataCount=0
    
    //2.定义viewModel属性
    private lazy var listViewModel = StatusListViewModel()
    
 

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !userLogin {
        vistorLoginView?.setupUIWithInfo(nil, tipText: "关注一些人，回这里看看有什么惊喜")
            
            return
        }
        //1.准备tableView
        prepareTableView()
     
        
           }
    
    //1.准备tableView
    private func prepareTableView() {
        
        self.tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellId)
    
        /*
        1.设置行高为自动计算行高
        2.设置预估行高
        3.给tableView的cell的容器视图设置一个 自上而下的约束
        */
        //1.自动计算行高
        self.tableView.rowHeight = UITableViewAutomaticDimension
        
        //2.设置预估高度
        self.tableView.estimatedRowHeight = 300
        
        //3.隐藏分割线
        tableView.separatorStyle = .None
        
        //4.使用系统的刷新控件,直接实例化就可以看到该控件
        //refreshControl=UIRefreshControl()
        
        //MARK:使用自定义刷新控件,控件大小的确定,可以在内部指定
        //let myRefresh = WBRefreshControl()
        self.tableView.addSubview(myRefresh)
        
//        //5.添加事件
        myRefresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
//        
        //6.添加小菊花,加载更多
        tableView.tableFooterView=indicatorView
        
        //7.添加tiplabel
        self.navigationController?.navigationBar.addSubview(tiplabel)
        self.navigationController?.navigationBar.insertSubview(tiplabel, atIndex: 0)
        
        

    }
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        //loadData()
    }
    
    //2.加载首页数据
    @objc private func loadData() {
        
        //使用listViewModel加载数据
        listViewModel.loadHomeData(indicatorView.isAnimating()) { (isSuccess) -> () in
            //停止刷新动画
             self.myRefresh.endRefreshing()
            if !isSuccess {
            
            //1.请求首页数据失败
            SVProgressHUD.showErrorWithStatus(AppErrorTip)
                return
            }
            
            //2.停止,上拉加载更多的数据,小菊花转动动画
            if self.indicatorView.isAnimating() {
                //停止转动
                self.indicatorView.stopAnimating()
            
            }else{
                //下拉刷新给出提示
                self.showTipAniumation(self.listViewModel.statuses.count - self.dataCount)
 
            }
            //请求数据一定成功
            //刷新列表
            //记录上一次的数据源的数量
            self.dataCount = self.listViewModel.statuses.count
            //tableView在没有拖拽的情况下 一种不完美解决方案
            //导致真的有数据 并且立即释放 不会刷新页面 存在bug
            self.tableView.reloadData()

       
        }
        
        
    }
    private func showTipAniumation(count: Int){
        
        let text = count == 0 ? "没有新微薄" : "有\(count)条微博"
        
        //设置文案
        tiplabel.text=text
        
        //做动画,需要记录之前的frame
        let rect=tiplabel.frame
        
        //动画效果
      UIView.animateWithDuration(0.5, animations: { () -> Void in
        //修改frame
        self.tiplabel.frame=CGRect(x: 0, y: 40, width: KWidth, height: 40)
        
        
        }) { (_) -> Void in
            //恢复frame
            UIView.animateWithDuration(0.5, delay: 1, options: [], animations: { () -> Void in
                self.tiplabel.frame=rect
                }, completion: { (_) -> Void in
                    print("OK")
            })
        }
    }
    
    
    //刷新提示的文案
    private lazy var tiplabel: UILabel = {
    
        let l=UILabel(frame: CGRect(x: 0, y: -64, width: KWidth, height: 40))
        l.textColor=UIColor.whiteColor()
        l.font=UIFont.systemFontOfSize(17)
        l.textAlignment = .Center
        l.backgroundColor=themeColor
        return l
    
    }()
    
    //下拉加载更多,小菊花
    private lazy var indicatorView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    
    
}


//在扩展中实现tableView的数据源方法
extension HomeTableViewController {
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }
     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return self.listViewModel.statuses.count
    }

 
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        //注意:手写代码,必须手动注册cell
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath) as! StatusCell
        
//        //显示文案
//        cell.textLabel?.text = self.statuses[indexPath.row].user?.name
        
        cell.status=self.listViewModel.statuses[indexPath.row]
        // Configure the cell...
        if indexPath.row == self.listViewModel.statuses.count - 1 && !indicatorView.isAnimating() {
            
            //转动小菊花
            indicatorView.startAnimating()
            
            loadData()
            print("开始默默加载数据")

        
        }

        //print(self.listViewModel.statuses[indexPath.row].retweeted_status?.text)
        
            return cell
    }


  

}